﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Support.DTO;
using System.Data;
using System.Data.SqlClient;

namespace DataAccess
{
    public class NomencladorDAL : BaseSQLDAL
    {
        public List<NomencladorDTO> BuscarNomeCodigo(string nroDocumento)
        {
            List<NomencladorDTO> nomenclador = new List<NomencladorDTO>();

            try
            {

                CreateCommand("Practica_BuscarPorCodigo", true);
                AddCmdParameter("@Codingresado", nroDocumento, ParameterDirection.Input);

                ExecuteReader();
                while (Read())
                {
                    nomenclador.Add(FillDTO(GetDataReader()));
                }
                return nomenclador;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                DisposeCommand();
                DisposeDataReader();
                CloseConnection();
            }
        }
        public List<NomencladorDTO> Nomenclador_Buscar(string codigo, string descripcion)
        {
            List<NomencladorDTO> nomenclador = new List<NomencladorDTO>();

            try
            {

                CreateCommand("Nomenclador_Buscar", true);
                AddCmdParameter("@Codigo", string.IsNullOrEmpty(codigo) ? "" : codigo, ParameterDirection.Input);
                AddCmdParameter("@Descripcion", string.IsNullOrEmpty(descripcion) ? "" : descripcion, ParameterDirection.Input);
                ExecuteReader();
                while (Read())
                {
                    nomenclador.Add(FillDTO(GetDataReader()));
                }
                return nomenclador;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                DisposeCommand();
                DisposeDataReader();
                CloseConnection();
            }
        }
        public List<NomencladorDTO> GetNomencladores()
        {
            List<NomencladorDTO> nomencladorAux = new List<NomencladorDTO>();

            try
            {
                CreateCommand("Nomenclador_Listado", true);

                ExecuteReader();
                while (Read())
                {
                    nomencladorAux.Add(FillDTO(GetDataReader()));
                }
                return nomencladorAux;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                DisposeCommand();
                DisposeDataReader();
                CloseConnection();
            }
        }
        private NomencladorDTO FillDTO(SqlDataReader reader)
        {
            
            return new NomencladorDTO()
            {

                // lo de rojos son los nombres de los campos, esos los tenes que cambiar con los de la propia tabla. 
                 
                IdNomenclador = Convert.ToInt32(GetOutResult("IdNomenclador")),
            CodigoNom = Convert.ToString(GetOutResult("CodigoNom")),
                Descripcion = Convert.ToString(GetOutResult("Descripcion")),
                Letra = Convert.ToString(GetOutResult("Letra")),
                Galeno = Convert.ToString(GetOutResult("Galeno")),
                Especialista = Convert.ToString(GetOutResult("Especialista")),
                Ayudante1 = Convert.ToString(GetOutResult("Ayudante1")),
                Ayudante2 = Convert.ToString(GetOutResult("Ayudante2")),
                Ayudante3 = Convert.ToString(GetOutResult("Ayudante3")),
                Anestesista = Convert.ToString(GetOutResult("Anestesista")),
                Gastos = Convert.ToString(GetOutResult("Gastos")),
                CodAnterior = Convert.ToString(GetOutResult("CodigoAnt")),
            };
        }
        public int InsertarNomenclador(NomencladorDTO nomenparam)
        {

            try
            {
                CreateCommand("Nomenclador_Insertar", true);
                // AddCmdParameter("@Codingresado", nomenparam.IdIdNomenclador, ParameterDirection.Input);
                AddCmdParameter("@CodigoNom", nomenparam.CodigoNom, ParameterDirection.Input);
                AddCmdParameter("@Descripcion", nomenparam.Descripcion, ParameterDirection.Input);
                AddCmdParameter("@Letra", nomenparam.Letra, ParameterDirection.Input);
                AddCmdParameter("@Galeno", nomenparam.Galeno, ParameterDirection.Input);
                AddCmdParameter("@Especialista", nomenparam.Especialista, ParameterDirection.Input);
                AddCmdParameter("@Ayudante1", nomenparam.Ayudante1, ParameterDirection.Input);
                AddCmdParameter("@Ayudante2", nomenparam.Ayudante2, ParameterDirection.Input);
                AddCmdParameter("@Ayudante3", nomenparam.Ayudante3, ParameterDirection.Input);
                AddCmdParameter("@Anestesista", nomenparam.Anestesista, ParameterDirection.Input);
                AddCmdParameter("@Gastos", nomenparam.Gastos, ParameterDirection.Input);
                AddCmdParameter("@CodigoAnte", nomenparam.CodAnterior, ParameterDirection.Input);
                ExecuteReader();
                Read();
                int result = Convert.ToInt32(GetOutResult("nom_id"));
                return result;

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                DisposeCommand();
                DisposeDataReader();
                CloseConnection();
            }
        }

        public void ModificarNomenclador(NomencladorDTO nomenparam)
        {
            try
            {
                CreateCommand("Nomenclador_Modificar", true);
                AddCmdParameter("@IdNomenclador", nomenparam.IdNomenclador, ParameterDirection.Input);
                AddCmdParameter("@CodigoNom", nomenparam.CodigoNom, ParameterDirection.Input);
                AddCmdParameter("@Descripcion", nomenparam.Descripcion, ParameterDirection.Input);
                AddCmdParameter("@Letra", nomenparam.Letra, ParameterDirection.Input);
                AddCmdParameter("@Galeno", nomenparam.Galeno, ParameterDirection.Input);
                AddCmdParameter("@Especialista", nomenparam.Especialista, ParameterDirection.Input);
                AddCmdParameter("@Ayudante1", nomenparam.Ayudante1, ParameterDirection.Input);
                AddCmdParameter("@Ayudante2", nomenparam.Ayudante2, ParameterDirection.Input);
                AddCmdParameter("@Ayudante3", nomenparam.Ayudante3, ParameterDirection.Input);
                AddCmdParameter("@Anestesista", nomenparam.Anestesista, ParameterDirection.Input);
                AddCmdParameter("@Gastos", nomenparam.Gastos, ParameterDirection.Input);
                AddCmdParameter("@CodigoAnte", nomenparam.CodAnterior, ParameterDirection.Input);
                ExecuteReader();
                Read();
               // int result = Convert.ToInt32(GetOutResult());
               // return result;

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                DisposeCommand();
                DisposeDataReader();
                CloseConnection();
            }
        
        }

        public void EliminarNomenclador(Int32 IdNomen)
        {
            try
            {
                CreateCommand("Nomenclador_Eliminar", true);
                AddCmdParameter("@IdNomenclador", IdNomen, ParameterDirection.Input);
                ExecuteReader();
                Read();
               

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                DisposeCommand();
                DisposeDataReader();
                CloseConnection();
            }

        }
    }
}
